package com.ebei.admin.service;

import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.ebei.admin.model.dto.RoleDTO;
import com.ebei.admin.model.dto.RoleTree;
import com.ebei.admin.model.entity.SysRole;
import com.ebei.common.util.Query;
import com.ebei.common.util.Result;

import java.util.List;

/**
 * 角色服务接口
 *
 * @author crazypenguin
 * @version 1.0
 * @created 2018/4/17
 */
public interface SysRoleService extends IService<SysRole> {

    /**
     * 分页查角色列表
     *
     * @param objectQuery         查询条件
     * @param objectEntityWrapper wapper
     * @return page
     */
    Page selectwithDeptPage(Query<Object> objectQuery, EntityWrapper<Object> objectEntityWrapper);

    /**
     * 通过部门ID查询角色列表
     * @param deptId 部门ID
     * @return 角色列表
     */
    List<SysRole> selectListByDeptId(Integer deptId);

    /**
     * 获取角色josn
     * @return
     */
    List<RoleTree> selectListTree(EntityWrapper<SysRole> sysRoleEntityWrapper);

    /**
     * 级联删除角色，暂定角色只有2层
     * @return
     */
    Boolean deleteByRoleId(String roleId);

    /**
     * 根据用户和角色编码获取角色
     * @param userId 用户id
     * @param roleCode 角色code
     * @return
     */
    List<RoleDTO> getRoleByUserIdAndRoleCode(Integer userId, String roleCode);

    /**
     * 判断当前用户是否拥有该角色权限
     * @param userId
     * @param roleCode
     * @return
     */
    Boolean hasPermission(Integer userId, String roleCode);

    /**
     * 初始化角色树
     * @param userId
     * @return
     */
    List<RoleTree> getTree(Integer userId);

    /**
     * 新增角色
     * @param sysRole
     * @return
     */
    Result<Boolean> addRole(SysRole sysRole);

    /**
     * 编辑角色
     * @param sysRole
     * @return
     */
    Result<Boolean> updateRole(SysRole sysRole);

    /**
     * 获取角色列表，按公司分类
     * @return
     */
    Result<List<SysRole>> getAllRoles();

}
